パソコン活用研究PCマニアックの道(アセンブラ、DOS、Windows、旧型PCの活用研究)
Prologの入手
1 Prologコンパイラの入手
Prologはめちゃくちゃ面白い人工知能言語です。フリーのコンパイラ、インタプリタもたくさんあります。
以下に、よく名前をきく代表的なPrologをあげましたが、これ以外にもたくさんあります。
Prologも様々な処理系が存在します。
(表1)
2 SWI-Prolog
Windows用のPrologとして、SWI-Prologはインストールも簡単だし、使い方も簡単なので、Prolog初心者にはお奨めの
ひとつです。SWI-Prologは、処理系で言うとエジンバラPrologという種類です。
http://www.swi-prolog.org/ から、Windows用のものをダウンロードして下さい。自己解凍式のEXEファイルに
なっているので、あとは解凍するだけで、インストール完了です。(超簡単)
デフォルトインストールで、「スタート」−「プログラム」にSWI-prologが登録されます。実行ファイルはplwin.exeです。
では、ためしに使ってみましょう。まずは、さざえさん一家の親子関係を題材にさせてもらいましょう。
テキストファイルで、以下のようなプログラムを作り、sazae.swi (またはsazae.pl)というファイル名で保存して下さい。
文の最後のピリオドを忘れないで下さい。
これは、”さざえ”は”たら”の親である、という意味のPrologプログラムです。拡張子は.plがProlog用としては一般的ですが
おじさんは、Perl用に.plを使いますので、.swiにしています。
Prologを起動したら、[File]-[Consult] とクリックして、先ほど作ったsazae0.swiを読み込んでください。
読み込みが完了すると、以下のように
% c:/Program Files/pl/src/sazae0.swi compiled ............
という表示がされます。
SWI-prologは
1 ?-
と表示してコマンド待ち状態になっていると思いますので、続けて
parent(sazae,tara).
と質問して下さい。これは、さざえはたらの親かという質問です。
sazae0.swi で「さざえはたらのおやである」、という事実を記述してありますので、PrologはYesと答えを返します。
面白い言語でしょう、Prologは。
続けて、parent(X,tara). と聞いてみましょう。これは、たらの親は誰(変数X)?という質問です。Prologでは、変数は大文字
にします。
X = sazae たらの親はさざえであるという答えが返ってきました。
それでは、もうひとつ、parent(X,Y). と聞いてみましょう。今度は、親も子供も変数ですので、親子関係にある親と子供は
誰?(X,Y)という質問です。
X = sazae Y =tara という答えが返ってきました。
どうですか、なんか面白そうな言語でしょう。
(図1)
3 Visual Prolog
Visual PrologはGUIなプログラムの開発も可能なPrologです。Personal Editionが、ダウンロード可能です。(上記表1
のサイト案内参照)
2004年1月の時点で、最新ノバージョンは6.1ですが、おじさんが使用しているのはVer5.2なので、ここではVer5.2で説明
します。(Ver6.1は仕様がかなり変更になっているようです。Ver5.2もまだダウンロードできるようです。)
インストールは、自己解凍形式のEXEファイルをクリックするだけなので、これも超簡単です。
では、Visual Prolog(Ver 5.2)を使ってみましょう。またまた、さざえさん一家の家族関係をネタにさせてもらいます。
起動したら、[Project]-[New Project]とクリックして下さい。
下の図1のように、Application Expertの画面が立ち上がります。
[General]タブのProject Name に"sazae"と打ち込んで下さい。
[Target]タブでは、以下の通り選択して下さい。
Platform: Win32
UI Strategy: Easywin
Target Type: exe
(図2)
以上の設定がすんだら、[Create]ボタンをクリックして下さい。
下の図3のようなProject Windowが表示されます。
ここで、sazae.pro(これが、ソースファイルになる)を選択して[Edit]ボタンを押して下さい。
ソースの編集画面が開きますので、以下のように記述して下さい。
(とりあえずここでは内容ははわからなくてもO.K.です。ま、単純なさざえさん一家の関係なんで
なんとなくわかると思いますが)
predicates
nondeterm parent(symbol,symbol)
son(symbol,symbol) -nondeterm(o,o)
nondeterm grandchild(symbol,symbol)
male(symbol)
female(symbol)
clauses
parent(namihei, sazae).
parent(fune,sazae).
parent(namihei,katuo).
parent(namihei,wakame).
parent(sazae,tara).
male(tara).
male(katuo).
male(namihei).
female(fune).
female(sazae).
female(wakame).
son(X,Y):-parent(X,Y),male(Y).
grandchild(X,Z):-parent(X,Y),parent(Y,Z).
goal
grandchild(X, Y),
male(X),male(Y),
write("Grand father:",X, " Grandchild&boy:",Y).
|
(図3)
sazae.proのコードの記述ができたら、[Project]-[Test Goal] とクリックして下さい。このコードをコンパイルする前に
試しに実行することができます。Unregisterd Personal Edition という画面が開きますので、[Continue
Evaluation]
を押して下さい。Attention!!というダイアログが表示され、「これはPersonal
Editionなので他人には配布しないこと」
というような注意が表示されますが、ここでも、[OK]ボタンを押すと、コードが試しに実行されます。
sazae.proの場合は、
Grand father: namihei Grandchild&boy: tara .........
と表示されるなずです。
これで、コードのバグを確認し、よければ正式にコンパイルしましょう。
[Project]-[Build]を押します。無事コンパイル完了すれば、sazae.exeができます。これで無事完了です。
sazae.exeを実行してみて下さい。下の図4のような表示がされるはすです。
(図4)
4 終わりに
prologて結構はまりそうなプログラム言語ではないでしょうか。
今回はコードについては特に説明しませんでしたが、次回以降、コードの記述方法について触れて
いきたいと思います。
TopPage
|